﻿using System;
using System.IO;
using Styx;
using Styx.Helpers;

namespace TuanHA_Combat_Routine
{
    public class THSettings : Settings
    {
        internal static readonly THSettings Instance = new THSettings();

        #region DataSource

        public bool UpdateStatus;

        public THSettings()
            : base(
                Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
                             string.Format(
                                 @"Routines/TuanHADKSpecialEdition/TuanHA-DK-Settings-20130401-{0}.xml",
                                 StyxWoW.Me.Name)))
        {
        }

        #endregion

        [Setting, DefaultValue(true)]
        public bool AutoAoE { get; set; }

        [Setting, DefaultValue(true)]
        public bool AntiMagicShell { get; set; }

        [Setting, DefaultValue(true)]
        public bool AntiMagicShellLichborne { get; set; }

        [Setting, DefaultValue(50)]
        public int AntiMagicShellHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool AntiMagicShellEnemy { get; set; }

        [Setting, DefaultValue(20)]
        public int AntiMagicShellEnemyHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool AntiMagicShellDebuff { get; set; }

        [Setting, DefaultValue(2)]
        public int AntiMagicShellDebuffNumber { get; set; }

        [Setting, DefaultValue(true)]
        public bool AntiMagicShellCaster { get; set; }

        [Setting, DefaultValue(2)]
        public int AntiMagicShellCasterNumber { get; set; }

        [Setting, DefaultValue(true)]
        public bool AntiMagicZone { get; set; }

        [Setting, DefaultValue(50)]
        public int AntiMagicZoneHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool AntiMagicZoneDebuff { get; set; }

        [Setting, DefaultValue(2)]
        public int AntiMagicZoneDebuffNumber { get; set; }

        [Setting, DefaultValue(true)]
        public bool AntiMagicZoneCaster { get; set; }

        [Setting, DefaultValue(2)]
        public int AntiMagicZoneCasterNumber { get; set; }

        [Setting, DefaultValue(true)]
        public bool AutoAttack { get; set; }

        [Setting, DefaultValue(true)]
        public bool AutoFace { get; set; }

        [Setting, DefaultValue(true)]
        public bool AutoMove { get; set; }

        [Setting, DefaultValue(true)]
        public bool AutoPathofFrost { get; set; }

        [Setting, DefaultValue(true)]
        public bool AutoPrecence { get; set; }

        [Setting, DefaultValue(true)]
        public bool AutoRacial { get; set; }

        [Setting, DefaultValue(true)]
        public bool AutoRaiseAlly { get; set; }

        [Setting, DefaultValue(true)]
        public bool AutoTarget { get; set; }

        [Setting, DefaultValue(true)]
        public bool AutoTaunt { get; set; }

        [Setting, DefaultValue(true)]
        public bool AttackASAP { get; set; }

        [Setting, DefaultValue(true)]
        public bool AttackOOC { get; set; }

        [Setting, DefaultValue(19)] //S
        public int Backward { get; set; }

        [Setting, DefaultValue(true)]
        public bool BoneShield { get; set; }

        [Setting, DefaultValue(true)]
        public bool BloodBoil { get; set; }

        [Setting, DefaultValue(10)]
        public int BloodChargeStack { get; set; }

        [Setting, DefaultValue(true)]
        public bool BloodPresence { get; set; }

        [Setting, DefaultValue(50)]
        public int BloodPresenceHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool BloodTap { get; set; }

        [Setting, DefaultValue(true)]
        public bool AutoBuff { get; set; }

        [Setting, DefaultValue(1)]
        public int BurstKey { get; set; }

        [Setting, DefaultValue(60)]
        public int BurstHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool ChainsofIce { get; set; }

        [Setting, DefaultValue(10)]
        public int ChainsofIceMinDistance { get; set; }

        [Setting, DefaultValue(true)]
        public bool ChainofIceMelee { get; set; }

        [Setting, DefaultValue(70)]
        public int ChainofIceMeleeHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool ChargeInterrupt { get; set; }

        [Setting, DefaultValue(2000)]
        public int ChargeInterruptMS { get; set; }

        [Setting, DefaultValue(true)]
        public bool ChargeStunEnemy { get; set; }

        [Setting, DefaultValue(40)]
        public int ChargeStunEnemyHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool ChargeStunFriend { get; set; }

        [Setting, DefaultValue(40)]
        public int ChargeStunFriendHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool ControlUndead { get; set; }

        [Setting, DefaultValue(true)]
        public bool DancingRuneWeapon { get; set; }

        [Setting, DefaultValue(100)]
        public int DancingRuneWeaponHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool DarkSimulacrumon { get; set; }

        [Setting, DefaultValue(true)]
        public bool DarkSimulacrumonCast { get; set; }

        [Setting, DefaultValue(true)]
        public bool DarkSimulacrumonCooldown { get; set; }

        [Setting, DefaultValue(true)]
        public bool DarkSimulacrumonAuto { get; set; }

        [Setting, DefaultValue(1)]
        public int DarkTransformation { get; set; }

        [Setting, DefaultValue(70)]
        public int DarkTransformationPercent { get; set; }

        [Setting, DefaultValue(true)]
        public bool DeathandDecay { get; set; }

        [Setting, DefaultValue(true)]
        public bool DeathandDecaySnare { get; set; }

        [Setting, DefaultValue(true)]
        public bool DeathCoil { get; set; }

        [Setting, DefaultValue(true)]
        public bool DeathCoilHealPet { get; set; }

        [Setting, DefaultValue(40)]
        public int DeathCoilHealPetHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool DeathGrip { get; set; }

        [Setting, DefaultValue(10)]
        public int DeathGripMinDistance { get; set; }

        [Setting, DefaultValue(true)]
        public bool DeathGripMelee { get; set; }

        [Setting, DefaultValue(40)]
        public int DeathGripMeleeHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool DeathsAdvance { get; set; }

        [Setting, DefaultValue(true)]
        public bool DeathGripInterrupt { get; set; }

        [Setting, DefaultValue(2000)]
        public int DeathGripInterruptMs { get; set; }

        [Setting, DefaultValue(true)]
        public bool DeathStrikeBloodEnable { get; set; }

        [Setting, DefaultValue(true)]
        public bool DeathStrike { get; set; }

        [Setting, DefaultValue(50)]
        public int DeathStrikeHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool DesecratedGround { get; set; }

        [Setting, DefaultValue(4000)]
        public int DesecratedGroundDebuffMinDuration { get; set; }

        [Setting, DefaultValue(95)]
        public int DoNotHealAbove { get; set; }

        [Setting, DefaultValue(1)]
        public int EmpowerRuneWeapon { get; set; }

        [Setting, DefaultValue(70)]
        public int EmpowerRuneWeaponPercent { get; set; }

        [Setting, DefaultValue(true)]
        public bool FesteringStrike { get; set; }

        [Setting, DefaultValue(true)]
        public bool Follow { get; set; }

        [Setting, DefaultValue(50)]
        public int FollowDistance { get; set; }

        [Setting, DefaultValue(23)] //W
        public int Forward { get; set; }

        [Setting, DefaultValue(true)]
        public bool FrostPresence { get; set; }

        [Setting, DefaultValue(true)]
        public bool FrostStrike { get; set; }

        [Setting, DefaultValue(1)]
        public int GargoyleFrenzy { get; set; }

        [Setting, DefaultValue(70)]
        public int GargoyleFrenzyPercent { get; set; }

        [Setting, DefaultValue(true)]
        public bool GnawInterrupt { get; set; }

        [Setting, DefaultValue(2000)]
        public int GnawInterruptMS { get; set; }

        [Setting, DefaultValue(true)]
        public bool GnawStunEnemy { get; set; }

        [Setting, DefaultValue(40)]
        public int GnawStunEnemyHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool GnawStunFriend { get; set; }

        [Setting, DefaultValue(40)]
        public int GnawStunFriendHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool GorefiendsGraspInterrupt { get; set; }

        [Setting, DefaultValue(2000)]
        public int GorefiendsGraspInterruptMS { get; set; }

        [Setting, DefaultValue(true)]
        public bool GorefiendsGraspAggro { get; set; }

        [Setting, DefaultValue(10)]
        public int GorefiendsGraspAggroMinDist { get; set; }

        [Setting, DefaultValue(true)]
        public bool GorefiendsGraspKiter { get; set; }

        [Setting, DefaultValue(10)]
        public int GorefiendsGraspKiterMinDist { get; set; }

        [Setting, DefaultValue(true)]
        public bool GorefiendsGraspMelee { get; set; }

        [Setting, DefaultValue(40)]
        public int GorefiendsGraspMeleeHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool GorefiendsGraspAoE { get; set; }

        [Setting, DefaultValue(1)]
        public int GorefiendsGraspAoENumber { get; set; }

        [Setting, DefaultValue(true)]
        public bool HealAttackC { get; set; }

        [Setting, DefaultValue(85)]
        public int HealAttackCHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool HealAttackD { get; set; }

        [Setting, DefaultValue(60)]
        public int HealAttackDHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool HealAttackS { get; set; }

        [Setting, DefaultValue(60)]
        public int HealAttackSHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool HealthStone { get; set; }

        [Setting, DefaultValue(40)]
        public int HealthStoneHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool HeartStrike { get; set; }

        [Setting, DefaultValue(true)]
        public bool HornofWinter { get; set; }

        [Setting, DefaultValue(true)]
        public bool HowlingBlast { get; set; }

        [Setting, DefaultValue(true)]
        public bool Huddle { get; set; }

        [Setting, DefaultValue(50)]
        public int HuddleHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool IceboundFortitude { get; set; }

        [Setting, DefaultValue(40)]
        public int IceboundFortitudeHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool IceboundFortitudeStun { get; set; }

        [Setting, DefaultValue(4000)]
        public int IceboundFortitudeStunDuration { get; set; }

        [Setting, DefaultValue(true)]
        public bool IcyTouch { get; set; }

        [Setting, DefaultValue(true)]
        public bool InterruptAll { get; set; }

        [Setting, DefaultValue(false)]
        public bool InterruptTarget { get; set; }

        [Setting, DefaultValue(false)]
        public bool InterruptFocus { get; set; }

        [Setting, DefaultValue("")]
        public string LastSavedSpec { get; set; }

        [Setting, DefaultValue("")]
        public string LastSavedMode { get; set; }

        [Setting, DefaultValue(true)]
        public bool LagTolerance { get; set; }

        [Setting, DefaultValue(true)]
        public bool LeapRange { get; set; }

        [Setting, DefaultValue(30)]
        public int LeapRangeDist { get; set; }


        [Setting, DefaultValue(true)]
        public bool LichborneFear { get; set; }

        [Setting, DefaultValue(4000)]
        public int LichborneFearDuration { get; set; }

        [Setting, DefaultValue(true)]
        public bool LichborneHeal { get; set; }

        [Setting, DefaultValue(50)]
        public int LichborneHealHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool MindFreezeInterrupt { get; set; }

        [Setting, DefaultValue(2000)]
        public int MindFreezeInterruptMs { get; set; }

        [Setting, DefaultValue(true)]
        public bool NecroticStrikeStack { get; set; }

        [Setting, DefaultValue(2)]
        public int NecroticStrikeDeathRuneNumber { get; set; }

        [Setting, DefaultValue(true)]
        public bool NecroticStrikeStackBurst { get; set; }

        [Setting, DefaultValue(true)]
        public bool Obliterate { get; set; }

        [Setting, DefaultValue(true)]
        public bool Outbreak { get; set; }

        [Setting, DefaultValue(33)]
        public int PauseKey { get; set; }

        [Setting, DefaultValue(false)]
        public bool Pause { get; set; }

        [Setting, DefaultValue(true)]
        public bool Pestilence { get; set; }

        [Setting, DefaultValue(true)]
        public bool PetAttack { get; set; }

        [Setting, DefaultValue(1)]
        public int PillarofFrost { get; set; }

        [Setting, DefaultValue(70)]
        public int PillarofFrostPercent { get; set; }

        [Setting, DefaultValue(true)]
        public bool PlagueLeech { get; set; }

        [Setting, DefaultValue(true)]
        public bool PlagueStrike { get; set; }

        [Setting, DefaultValue(5000)]
        public int PresenceSwapTimeout { get; set; }

        [Setting, DefaultValue(true)]
        public bool PrintChat { get; set; }

        [Setting, DefaultValue(75)]
        public int PriorityHeal { get; set; }

        [Setting, DefaultValue(1)]
        public int ProfBuff { get; set; }

        [Setting, DefaultValue(60)]
        public int ProfBuffHP { get; set; }

        [Setting, DefaultValue(1)]
        public int RaiseDead { get; set; }

        [Setting, DefaultValue(70)]
        public int RaiseDeadPercent { get; set; }

        [Setting, DefaultValue(true)]
        public bool RemorselessWinter { get; set; }

        [Setting, DefaultValue(50)]
        public int RemorselessWinterHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool RemorselessWinterEnemy { get; set; }

        [Setting, DefaultValue(3)]
        public int RemorselessWinterEnemyNumber { get; set; }

        [Setting, DefaultValue(true)]
        public bool RemorselessWinterDeathGrip { get; set; }

        [Setting, DefaultValue(true)]
        public bool RemorselessWinterBurst { get; set; }

        [Setting, DefaultValue(true)]
        public bool RemorselessWinterEnemyLow { get; set; }

        [Setting, DefaultValue(30)]
        public int RemorselessWinterEnemyLowHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool RuneStrike { get; set; }

        [Setting, DefaultValue(true)]
        public bool RuneTap { get; set; }

        [Setting, DefaultValue(30)]
        public int RuneTapHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool ScourgeStrike { get; set; }

        [Setting, DefaultValue(true)]
        public bool SoulReaper { get; set; }

        [Setting, DefaultValue(40)]
        public int SoulReaperHP { get; set; }

        [Setting, DefaultValue(17)] //Q
        public int StrafleLeft { get; set; }

        [Setting, DefaultValue(5)] //E
        public int StrafleRight { get; set; }

        [Setting, DefaultValue(true)]
        public bool StrangulateInterrupt { get; set; }

        [Setting, DefaultValue(2000)]
        public int StrangulateInterruptMs { get; set; }

        [Setting, DefaultValue(true)]
        public bool StrangulateInterruptTarget { get; set; }

        [Setting, DefaultValue(60)]
        public int StrangulateInterruptTargetHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool AsphyxiateHelpFriend { get; set; }

        [Setting, DefaultValue(50)]
        public int AsphyxiateHelpFriendHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool StrangulateLow { get; set; }

        [Setting, DefaultValue(30)]
        public int StrangulateLowHP { get; set; }

        [Setting, DefaultValue(1)]
        public int Trinket1 { get; set; }

        [Setting, DefaultValue(60)]
        public int Trinket1HP { get; set; }

        [Setting, DefaultValue(1)]
        public int Trinket2 { get; set; }

        [Setting, DefaultValue(60)]
        public int Trinket2HP { get; set; }

        [Setting, DefaultValue(4)] //A
        public int TurnRight { get; set; }

        [Setting, DefaultValue(1)] //D
        public int TurnLeft { get; set; }

        [Setting, DefaultValue(true)]
        public bool UnholyBlight { get; set; }

        [Setting, DefaultValue(3)]
        public int UnittoStartAoE { get; set; }

        [Setting, DefaultValue(40)]
        public int UrgentHeal { get; set; }

        [Setting, DefaultValue(true)]
        public bool UseFood { get; set; }

        [Setting, DefaultValue(50)]
        public int UseFoodHP { get; set; }

        [Setting, DefaultValue(true)]
        public bool UsePauseKey { get; set; }

        [Setting, DefaultValue(true)]
        public bool VampiricBlood { get; set; }

        [Setting, DefaultValue(20)]
        public int VampiricBloodHP { get; set; }
    }
}